import request from '@/utils/request'
import * as mock from './mock/user'

const isMock = import.meta.env.VITE_API_MOCK === 'true'

/**
 * 获取登录nonce
 * @param {Object} data 请求数据
 * @param {string} data.typ - 类型，如'login'
 * @param {string} data.address - 钱包地址
 * @returns {Promise}
 */
export function nonce(data) {
  if (isMock) {
    return Promise.resolve(mock.nonce(data))
  }
  // 使用GET请求，将参数作为query参数传递
  // 这样可以避免CORS预检请求中的content-type问题
  return request({
    url: '/user/nonce',
    method: 'get',
    params: data
  })
}

/**
 * 用户登录
 * @param {Object} data 登录数据
 * @param {string} data.address - 钱包地址
 * @param {string} data.message - 签名消息
 * @param {string} data.signature - 签名结果
 * @returns {Promise}
 */
export function login(data) {
  if (isMock) {
    return Promise.resolve(mock.login(data))
  }
  return request({
    url: '/user/login',
    method: 'post',
    data
  })
}

/**
 * 获取用户资料
 * @returns {Promise}
 */
export function getUserProfile() {
  if (isMock) {
    return Promise.resolve(mock.getUserProfile())
  }
  return request({
    url: '/user/info',
    method: 'get'
  })
}

/**
 * 更新用户资料
 * @param {Object} data 用户资料
 * @param {string} data.nickname - 昵称
 * @param {string} data.inviter - 邀请人
 * @returns {Promise}
 */
export function updateUserProfile(data) {
  if (isMock) {
    return Promise.resolve(mock.updateUserProfile(data))
  }
  return request({
    url: '/user/profile',
    method: 'put',
    data
  })
}

/**
 * 退出登录
 * @returns {Promise}
 */
export function logout() {
  if (isMock) {
    return Promise.resolve(mock.logout())
  }
  return request({
    url: '/user/logout',
    method: 'post'
  })
}

/**
 * 获取用户通知设置
 * @returns {Promise}
 */
export function getNotificationSettings() {
  if (isMock) {
    return Promise.resolve(mock.getNotificationSettings())
  }
  return request({
    url: '/user/notification-settings',
    method: 'get'
  })
}

/**
 * 更新用户通知设置
 * @param {Object} data 通知设置
 * @returns {Promise}
 */
export function updateNotificationSettings(data) {
  if (isMock) {
    return Promise.resolve(mock.updateNotificationSettings(data))
  }
  return request({
    url: '/user/notification-settings',
    method: 'put',
    data
  })
}

/**
 * 获取安全中心信息
 * @returns {Promise}
 */
export function getSecurityInfo() {
  if (isMock) {
    return Promise.resolve(mock.getSecurityInfo())
  }
  return request({
    url: '/user/security',
    method: 'get'
  })
}

/**
 * 获取用户协议
 * @param {string} type 协议类型 (user/privacy)
 * @returns {Promise}
 */
export function getAgreement(type) {
  if (isMock) {
    return Promise.resolve(mock.getAgreement(type))
  }
  return request({
    url: `/agreement/${type}`,
    method: 'get'
  })
}

/**
 * 获取关于我们信息
 * @returns {Promise}
 */
export function getAboutInfo() {
  if (isMock) {
    return Promise.resolve(mock.getAboutInfo())
  }
  return request({
    url: '/about',
    method: 'get'
  })
}

/**
 * 获取账户交易记录
 * @param {Object} params 查询参数
 * @param {string} [params.currency] - 币种
 * @param {string} [params.type] - 交易类型
 * @param {number} [params.page=1] - 页码
 * @param {number} [params.size=10] - 每页条数
 * @returns {Promise}
 */
export function getAccountTransactions(params) {
  if (isMock) {
    return Promise.resolve(mock.getAccountTransactions(params))
  }
  return request({
    url: '/user/transactions',
    method: 'get',
    params
  })
}

/**
 * 获取用户信息
 * @returns {Promise}
 */
export function getUserInfo() {
  if (isMock) {
    return Promise.resolve(mock.getUserInfo())
  }
  return request({
    url: '/user/info',
    method: 'get'
  })
}

/**
 * 获取用户订单
 * @param {Object} params 查询参数
 * @param {number} [params.page=1] - 页码
 * @param {number} [params.size=10] - 每页条数
 * @param {string} [params.status] - 订单状态
 * @returns {Promise}
 */
export function getUserOrders(params) {
  if (isMock) {
    return Promise.resolve(mock.getUserOrders(params))
  }
  return request({
    url: '/order/list',
    method: 'get',
    params
  })
}

/**
 * 获取用户项目
 * @param {Object} params 查询参数
 * @param {number} [params.page=1] - 页码
 * @param {number} [params.size=10] - 每页条数
 * @param {string} [params.status] - 项目状态
 * @returns {Promise}
 */
export function getUserProjects(params) {
  if (isMock) {
    return Promise.resolve(mock.getUserProjects(params))
  }
  return request({
    url: '/user/projects',
    method: 'get',
    params
  })
}

/**
 * 获取用户钱包信息
 * @returns {Promise}
 */
export function getUserWallet(params) {
  if (isMock) {
    return Promise.resolve(mock.getUserWallet ? mock.getUserWallet() : {
      address: '0x1234...5678',
      balance: '10.5',
      currency: 'ETH'
    })
  }
  return request({
    url: '/user/wallet',
    method: 'get',
    params
  })
}

/**
 * 绑定用户的邀请码
 * @param {*} data 
 */
export function bindInviterCode(data){
  return request({
    url: '/user/invite',
    method: 'post',
    data
  })
}


/**
 * 绑定用户的邀请码
 * @param {*} data 
 */
export function userInfoProfile(data){
  return request({
    url: '/user/info',
    method: 'post',
    data
  })
}
